package org.gushi.datastruct.a05;

import org.gushi.datastruct.a05.list.List;
import org.gushi.datastruct.a05.list.LinkedList;

/**
 * 双端队列的实现
 * @param <E>
 */
public class Deque<E>  {

    private List<E> list =  new LinkedList<E>();
    // 元素的数量
    public int size(){
        return list.size();
    }
    // 是否为空
    public boolean isEmpty(){
        return list.isEmpty();
    }
    // 清空
    public void clear(){
        list.clear();
    }

    // 从队头出队
    public E deQueueFront(){
        if(list.size()<=0){
            return null;
        }
        return list.remove(list.size() - 1);
    }
    // 从队头入队
    public void enQueueFront(E element){
        if(list.size()<=0){
            list.add(0,element);
        }
        list.add(list.size() - 1,element);
    }

    // 从队尾入队
    public void enQueueRear(E element){
        list.add(0,element);
    }
    // 从队尾出队
    public E deQueueRear(){
        return list.remove(0);
    }
    // 获取队列的头元素
    public E front(){
        if(list.size()<=0){
            return null;
        }
        return list.get(size() - 1);
    }
    // 获取队列的尾元素
    public E rear(){
        return list.get(0);
    }

}
